perm filename ITT.4[ITT,WD] blob sn#202780 filedate 1976-02-14 generic text, type T, neo UTF8
\|\\M0basl30;\M2germ35;\M9fix20;\←=90;\ε\`'10444;\F0\; \8u(z)(\{⊗z⊗\}=2;=2;)\;

4.	One - Way Functions

\J	We have already seen that oneway functions offer a solution to the login
problem when the system's password directory is insecure, and  to  the  onetime,
oneway  message  authentication problem.     They also allow the construction of
trap door questions. Their cryptographic importance is even more basic  and,  as
shown  below, the existence of oneway functions is necessary to the existence of
secure cryptosystems.   Because of their fundamental importance to cryptography,
and  because  it  seems  like  a  simpler  task,  we suggest that a proof of the
existence of oneway functions should be pursued as a first step toward  a  proof
of  the existence of secure cryptosystems. This section explores possible oneway
functions in hope of stimulating such work.
	Suppose we have a cryptosystem which is secure against a known plaintext
attack and which  operates  with  a  key  on  blocks  of  plaintext  to  produce
cryptograms.   By  using  a  fixed,  known  sequence P in place of the plaintext
block, by using X in place of the key, and by taking the resultant cryptogram to
be  Y we implement a oneway function Y = f(X) ≡ T\∪X\⊗(P). This function must be
oneway because solving for X given Y is equivalent to finding  the  key  from  a
single  known  plaintext  -  cryptogram  pair.   Public knowledge of f(.) is now
equivalent to public knowledge of {T\∪k\⊗(.)} and P.
	Thus,  the  existence of computationally secure cryptosystem implies the
existence of a oneway function. Therefore, the existence of oneway functions  is
a necessary condition for the existence of computationally secure cryptosystems.
While the convese is not necessarily true, as shown in  the  next  section  with
logs  mod  p  it is possible for a function originally found in the search for a
oneway function to yield a good cryptosystem.
	oneway functions are also basic to key generator based cryptosystems.  A
key generator is a pseudo-random bit generator whose  output  is  XOR'd  with  a
message represented in binary form, in imitation of a one time pad.   The key is
used as a "seed" which determines the pseudo random output sequence.    A  known
plaintext  attack  thus  reduces  to the problem of determining the key from the
output of the key generator. For the system to be  usable,  calculation  of  the
output  from  the  key must be computationally simple.  And for the system to be
secure, computation of the key from the output must be infeasible. Thus  a  good
key generator is, almost by definition, a oneway function.

	Use  of either of these cryptosystems as a one way function suffers from
a minor problem.      As noted earlier, if the function  f(.)  is  not  uniquely
invertible,  it  is  not  necessary  (or possible) to find the actual value of X
used.    Rather any X with the same image will suffice.  And, while each mapping
T\∪k\⊗(.)  in  a  cryptosystem must be bijective there is no such restriction on
the function f(.) defined implicitly in  ()  from  key  to  cryptogram.  Indeed,
guaranteeing  that  a  cryptosystem  has  this property appears quite difficult.
Rather, we suspect that in a good cryptosytem the mapping f(.) will tend to have
the  characteristics  of  a  randomly  chosen  mapping  (i.e.     f(X) is chosen
uniformly from all possible Y, and successive choices are independent).  In this
case,  if  X  is  chosen  uniformly  and  there  are an equal number of keys and
messages (X and Y), then the probability that the resultant Y has i inverses  is
approximately  e\∩-1\⊗  /  (i- - 1)! for i = 1, 2, 3, ...  .   This is a Poisson
distribution with mean λ=1, scaled by a factor of  i.  The  expected  number  of
inverses is thus only 2.  While it is possible for f(.) to be more degenerate, a
good cryptosystem will not be too degenrate since then the key is not being well
used.   In the worst case, if f(X) ≡ y\∪0\⊗ for some y\∪0\⊗, we have T\∪k\⊗(P) ≡
C\∪0\⊗, and encipherment of P would not depend on the key at all!
	Evans,  Kantrowitz  and  Weiss [] suggest a different way to use a block
cipher  system  to  produce  a  oneway  function.   The  suggest  that  g(X)   =
T\∪X\⊗(X)\R(  ) should be oneway.  While it probably is, we prefer the technique
() because of its equivalence to a known plaintext attack.


	The  next  candidate  for  a oneway function is a high degree polynomial
over a finite field.  That is
	Y  =  p(X),  mod q where q is a prime number and p(X) is a polynomial of
degree n.  This technique is suggested by the relative ease of evaluation of  an
nth degree polynomial when compared with solution of an nth degree equation.
	We must do the evaluation mod q for two reasons.   Most  importantly  we
must  keep the word size of the output small.  If X is a 32 bit number and n=100
we get a 3200 bit output when evaluating over the  reals.    By  evaluating  mod
q=2\∩32\⊗-5,  which  is  prime [], we ensure that Y is representable in 32 bits.
This also simplifies evaluation of p(X)  since  only  32  bit  numbers  need  be
multiplied or added.
	A second reason for using modular arithmetic is  that  polynomials  over
the reals are continuous and are therefore sesceptible to iterative solution, as
by Newton's method.   Of course, if the  solution  must  be  an  integer  to  be
acceptable in login, there is no guarantee that the root found will work.   Even
so, the "discontinuity" introduced by modular arithmetic appears attractive.
	Unfortunately,   the   intuitive   difficulty  of  solving  high  degree
polynomial equations over a finite field is somewhat  unfounded,  and  the  best
currently known algorithms require on the order of n\∩2\⊗ operations [].   Since
evaluation of an arbitrary nth degree polynomial requires  n  multiplies  and  n
additions,  at  best  the ratio of inverse to forward computation time is on the
order of n.  This is too small since we need ratios of 10\∩6\⊗, 10\∩9\⊗ or  even
greater.     To  obtain  these  large  ratios  would  require  too  much forward
computation time and, more importantly, too  much  memory  for  storage  of  the
polynomial's coefficients.
	Purdy [] suggests using sparse polynomials to circumvent  this  problem.
Yet  one  has no assurance that this small special class of polynomials which is
so much easier than usual to compute in the forward direction, is not also  much
easier to invert.  Further study of this problem is indicated.
	Finding a root of a polynomial is a special case  of  factoring  over  a
ring  [].    Rings  other  than  polynomials may prove useful and should also be
investigated.

	The  next  candidate  for  a  oneway  function comes from computational
complexity.  As discussed in the next section, any NP complete problem  is  very
strongly  believed  to  require  computation  time  which  is  exponential in a
parameter n of the problem.  One of  the  NP  complete  problems,  the  knapsack
problem, yields a oneway function if this is true.
	Let y = f(X) = a.X where a is a known vector of n integers (a1,a2,...an)
and x is a vector of n 0's and 1's.  Calculation of f is simple, involving 
summing at most n integers.  The problem of inverting f is know as the knapsack
problem and requires finding a subset of the {ai} which sum to y.
	Exhaustive search of all 2↑n subsets is computationally infeasible for
n in the range 100 to 200.  Care must be excercised, however, in selecting
the parameters of the problem to ensure that shortcuts are not possible.
For example if n=100 and each ai is 32 bits long, y is at most 39 bits long,
and f is hightly degenerate; requiring on average only 2↑38 tries to find
a solution. 
Somewhat more trivially, if ai = 2↑i-1 then inverting f is euivalent to 
finding the binary decomposition of y.
	This example demonstrates both the great promise and  the  considerable
shortcomings  of  contemporary complexity theory.  The theory only tells us that
the knapsack problem is difficult in  the  worst  case.  It  gives  no
indication of its difficulty for any particular array.

	Another possible oneway  function  is  suggested  by  the  computational
characteristics  of  sequential decoding []. As shown by Jacobs and Berlekamp []
there is a lower bound to the computation required for sequential decoding,  and
for  r  >  R\∪comp\⊗  the  expected  number  of  computations per decoded bit is
infinite.   While it is possible that there are non-sequential  techniques  with
better  computational  characteristics,  the  existence  of  a  lower  bound  on
computation  is  encouraging,  and  invites  further  study.     For   ease   of
implementation  the  "noisy"  channel  used  would  be  an erasure channel which
deterministically erases every other bit (or two out of every there, etc.). This
really  makes  the  code a convolutional compressive code [ , ], and as shown by
Koshelev[] the R\∪comp\⊗ phenomenon is still present.   The  user's  password  X
would  be a string of charactters which was meaningful (and easily checked to be
so) in some artifical language, and f(X) would be the compressed data.  So  long
as  R\∪comp\⊗  <  R  <  H,  where  H is the entropy of the language, there would
typically be a unique inverse (i.e. only one meaningful decoded sequence) yet it
would require large amounts of computation to find.  Calculation of f(X), on the
other hand, is simple and merely requires the convolutional encoding operation.
	The  last  potential  oneway function we shall discuss in exponentiation
mod q, which was suggested to  the  authors  by  Prof.  John  Gill  of  Stanford
University.

For  1 ≤ X ≤ P-1 let Y = α↑X, mod q where q is a prime integer and α is a known,
primitive element of GF(q).   For 1≤Y≤P-1  we  can  define  the  unique  inverse
X=logαY, mod q.  And while the exponentiation operation is computable in at most
2log2 q multiplications [], Knuth [] gives an algorithm which requires O(sqrt q)
operations as the best he knew for evaluating the log mod q operation ().  While
special cases have since been found [,,] in which logs mod q are  computable  in
roughly O(log 2*q) operations, for properly chosen values of q Knuth's algorithm
is still the best known.
	Taking  q  to  be  slightly  less  than  2↑100,  all quantities could be
represented as 100 bit numbers.  Calculation of Y from X would  take  about  200
operations  on  100  bit  numbers, a very reasonable requirement.   Yet, if q is
properly chosen, calculation of X from Y would take on the order of 2↑50 = 10↑15
operations  with  the  best,  currently known algorithm. If this is not adiquate
going to 200 bit numbers, would only double the forward  computation  time,  but
would square the number of operations required to invert the function to 10↑30.